package com.shujia.scala

import scala.io.Source

object Demo25WordCount {
  def main(args: Array[String]): Unit = {

    /**
     * 统计单纯的数量
     *
     */
    //链式调用
    //1、读取文件
    val lines: List[String] = Source
      .fromFile("data/words.txt") //读取文件
      .getLines() //获取所有行
      .toList //转换成list集合

    //2、将一行中的多个单词拆分成多行
    val words: List[String] = lines.flatMap((line: String) => line.split(","))

    //3、按照单词分组
    val groupByMap: Map[String, List[String]] = words.groupBy((word: String) => word)

    //4、计算单词的数量
    val wordCount: Map[String, Int] = groupByMap.map((kv: (String, List[String])) => {
      //单词
      val word: String = kv._1
      //组内所有的单词
      val wordsList: List[String] = kv._2
      //计算单词的数量
      val count: Int = wordsList.length
      //返回单词和数量
      (word, count)
    })

    wordCount.foreach(println)


    /**
     * 简写：链式调用
     *
     */

    Source
      //读取文件
      .fromFile("data/words.txt")
      //获取所有行
      .getLines()
      //转换成集合
      .toList
      //将一行转换成多行
      .flatMap((line: String) => line.split(","))
      //安装单词分组
      .groupBy((word: String) => word)
      //统计单词的数量
      .map(kv => (kv._1, kv._2.length))
      .foreach(println)

  }

}
